package com.winsdom.service.customer;

import com.winsdom.entity.customer.CustomerEnterpriseUpdateRequest;

import java.util.Map;

/**
 * 企业客户信息更新服务接口
 * <p>
 * 该接口负责处理企业客户基本信息的更新操作，包括客户主表信息、
 * 企业扩展信息、联系人信息及关联的楼盘分类关系的更新。
 * <p>
 * 更新策略：
 * - 仅更新请求中提供的非空字段（选择性更新）
 * - 联系人信息采用全量覆盖策略（先删除旧数据，再插入新数据）
 * - 所有操作在一个事务中执行，确保数据一致性
 */
public interface CustomerEnterpriseUpdateService {

    /**
     * 更新企业客户的基本信息（主表+扩展表+联系人）
     * <p>
     * 业务流程：
     * 1. 校验客户类型是否为企业（类型码4），否则抛出异常
     * 2. 根据客户ID查询现有数据，用于对比变更字段
     * 3. 更新客户主表字段（仅更新有变更的字段）
     * 4. 更新企业扩展表字段（如注册资本、法定代表人等）
     * 5. 全量更新联系人信息（先删除旧联系人，再插入新联系人）
     * 6. 处理联系人与楼盘分类的关联关系（去重后插入）
     * <p>
     * 返回结果说明：
     * <pre>
     * {
     *   "success": true,                     // 更新操作是否成功（布尔值）
     *   "message": "更新成功",                // 操作结果描述
     *   "updatedFields": ["customerName", "registeredCapital"], // 实际更新的字段列表
     *   "updateTime": "2025-05-16T15:30:00"  // 更新时间（ISO 8601格式）
     * }
     * </pre>
     *
     * @param request 企业客户更新请求对象，包含需要更新的字段（非null）
     * @return 包含更新操作结果的Map，结构如上所示
     * @throws IllegalArgumentException 当客户类型不是企业或客户ID不存在时抛出
     */
    Map<String, Object> updateEnterpriseBasicInfo(CustomerEnterpriseUpdateRequest request);
}